/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojo.Loaisp;
import util.HibernateUtil;

/**
 *
 * @author kydrenw
 */
public class LoaispDAO {
    
    /**
     * Lấy thông tin loại sản phẩm theo mã sản phẩm.
     * @param ma Mã của loại sản phẩm cần lấy thông tin.
     * @return đối tượng chứa thông tin loại sản phẩm, null nếu thất bại.
     */
    public static Loaisp layThongTin(int ma) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Loaisp sp = (Loaisp) session.get(Loaisp.class, ma);

        return sp;
    }
    
    /**
     * Lấy danh sách tất cả các loại sản phẩm.
     * @return danh sách các loại sản phẩm tìm thấy.
     */
    public static List<Loaisp> layDanhSach() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        String hql = "FROM Loaisp";
        Query query = session.createQuery(hql);
        List<Loaisp> ds = query.list();

        return ds;
    }
    
    /**
     * Cập nhật thông tin của loại sản phẩm truyền vào
     * @param loai Đối tượng loại sản phâm rcần cập  nhật thông tin.
     * @return true nếu thành công, false nếu thất bại.
     */
    public static boolean suaLoai(Loaisp loai) {
        if (DanhmucDAO.layThongTin(loai.getMa()) == null) {
            return false;
        }
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            session.beginTransaction();
            session.saveOrUpdate(loai);
            session.flush();
            session.getTransaction().commit();
            return true;
        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.println(e);
            return false;
        } finally {
        }
    }

    /**
     * Lấy danh sách loại sản phẩm theo mã danh mục.
     * @param ma: Mã danh mục.
     * @return : Danh sách loại sản phẩm thuộc danh mục cần tìm.
     */
    public static List<Loaisp> layDSTheoLoai(int ma) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = session.getTransaction();
        String hql = "FROM Loaisp where danhmuc =:Ma";
        List<Loaisp> ds = null;

        try {
            trans.begin();
            Query query = session.createQuery(hql);
            query.setInteger("Ma", ma);
            ds = query.list();
            trans.commit();
        } catch (Exception ex) {
            trans.rollback();
            System.out.println(ex.getMessage());
            return null;
        }
        return ds;
    }
    
    /**
     * Thêm loại sản phẩm mới vào CSDL.
     * @param loai: Loại sản phẩm mới cần thêm vào.
     * @return : true nếu thành công, false nếu thất bại.
     */
    public static boolean themLoaiSP(Loaisp loai) {
        Boolean result = true;
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = session.getTransaction();

        try {
            trans.begin();
            session.save(loai);
            trans.commit();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            result = false;
        }
        return result;
    }

    /**
     * Tìm kiếm Loại sản phẩm dựa theo mã danh mục hoặc từ khóa.
     * @param madm : danh mục cần tìm.
     * @param tukhoa : Từ khóa liên quan tói loại sản phẩm cần tìm.
     * @return : danh sách các loại sản phầm tìm thấy. Null nếu không tìm thấy.
     */
    public static List<Loaisp> timKiem(int madm, String tukhoa) {
        String hql = null;

        hql = "FROM Loaisp where danhmuc.ma="+madm;
        if (tukhoa != null) {
            hql += " and ten like '%" + tukhoa + "%'";
        }

        List<Loaisp> ds = null;
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createQuery(hql);
        ds = query.list();

        return ds;
    }
}
